package com.caijinbang.study.holder;

/**
 * 将不同的数据源标识记录在ThreadLocal中
 *
 * @author caijb
 * @version 1.0.0
 * @date 2018-05-02 15:09
 */
public class DbContextHolder {

    public enum DbType {
        MASTER, SLAVE
    }

    /**
     * 本地线程变量
     */
    private static final ThreadLocal<DbType> contextHolder = new ThreadLocal<>();

    /**
     * 设置数据源类型
     *
     * @param dbType
     */
    public static void setDbType(DbType dbType) {
        if (dbType == null) {
            throw new NullPointerException();
        }
        contextHolder.set(dbType);
    }

    /**
     * 获取数据源类型
     *
     * @return
     */
    public static DbType getDbType() {
        return contextHolder.get() == null ? DbType.MASTER : contextHolder.get();
    }

    /**
     * 移除数据源类型
     */
    public static void clearDbType() {
        contextHolder.remove();
    }
}
